package com.hotpot.telecom.utils;

import com.xiaoleilu.hutool.http.HttpRequest;
import com.xiaoleilu.hutool.json.JSONUtil;
import org.springframework.scheduling.annotation.Async;

import java.util.HashMap;
import java.util.Map;



/**
 * 描述:通用电信接口调用工具类
 * @author:ruikanwang
 * @date: 2017年11月13日 上午10:15:52
 * 注意：本内容仅限于新疆感知科技有限公司内部传阅,禁止外泄以及用于其他的商业目
 * Copyright © 2017-ganinfo. All rights reserved.
 */
public class TeleComUtil {
	
	/**
	 * 描述：：增加客户
	 * 功能说明：用于自定制社区范围，注意社区范围不应该过大，否则会影响后续所
				有接口的数据传输。该接口输入为社区的综合信息。数据信息为一个 濽s瀂瀁 串。
				Json 中的 key 的关系对照如下：
				'custname' 社区名称 必须填写
				'areacode' 社区归属的地州区号 乌鲁木齐为 991 必须填写
				'custlati' 社区中心所在纬度
				'custlong' 社区中心所在经度
				传入的社区的点，请必须按照顺序输入，否则可能造成异常，字典中
				data2={'0':'90.289577|43.872638','1':'90.277791|43.839044','2':'90.279372|43.829
				055','3':'90.298776|43.829055','4':'90.317461|43.838107','5':'90.307687|43.862655
				','6':'90.307687|43.862655'}的 0， 1， 2 等为顺序号，必须提供
				调用地址：濻tt瀃://IP:9802/addcust
				调用代码示例：
				#-*-coding:utf-8-*-
				import requests,json
				url='''http://IP:9802/addcust'''
				data1={'custname':'testinterface','areacode':'994','custlati':'','custlong':''}
				data2={'0':'90.289577|43.872638','1':'90.277791|43.839044','2':'90.279372|43.829055','3':'90.298776|43.829055','4':'90.317461|43.838107','5':'90.307687
				|43.862655','6':'90.307687|43.862655'}
				dataall={'customerinfo':data1,'districtinfo':data2}
				print 'sjalouankkjhfsa213sdf1233gbvcm#1.6'+'|'+json.dumps(dataall)
				reqresult=requests.post(url=url,data='sjalouankkjhfsa213sdf1233gbvcm'+'|'
				+json.dumps(dataall))
				print reqresult.content
				返回结果：新增创建的客户 ID
	 * @param range
	 * @return
	 * @return: String
	 */
	/*public static String addcust(Range range){
		Map<String, Object> paramMap=new HashMap<String, Object>();
		Map<String, String> data1map=new HashMap<>();
		data1map.put("custname", range.getCustname()==null?"":range.getCustname());
		data1map.put("areacode", range.getAreacode()==null?"":range.getAreacode());
		data1map.put("custlati", range.getCustlati()==null?"":range.getCustlati());
		data1map.put("custlong", range.getCustlong()==null?"":range.getCustlong());
		Map<String, String> data2map=new HashMap<>();
		for (int i = 0; i < range.getPointList().size(); i++) {
			data2map.put(i+"", range.getPointList().get(i));
		}
		paramMap.put("data1", JSONUtil.toJsonStr(data1map));
		paramMap.put("data2", JSONUtil.toJsonStr(data2map));
		return sendHttp(HttpConstant.ADDCUST_URL, JSONUtil.toJsonStr(paramMap));
	}*/
	public static String addcust(String baseInfo, String points){
		Map<String, Object> paramMap=new HashMap<String, Object>();
		paramMap.put("customerinfo", JSONUtil.parseObj(baseInfo));
		paramMap.put("districtinfo", JSONUtil.parseObj(points));
		return sendHttp(HttpConstant.ADDCUST_URL, JSONUtil.toJsonStr(paramMap));
	}
	

	/**
	 * 描述：获取指定的 XID 的历史位置
	 * 功能说明：返回某个虚 id 的用户历史信息，注意查询范围不能跨月份。
		调用代码示例：
		#-*-coding:utf-8-*-
		import requests,json
		url='''http://127.0.0.1:9802/getlochis'''
		reqresult=requests.post(url=url,data='sjalouankkjhfsa213sdf1233gbvcm'+'|'
		+'24418'+'|'+'20171101000000'+'|'+'20171115000000')
		print reqresult.content
		返回结果 json：
		[["86.0634543369", "44.2961624435", "20171114114916"], ["86.0637431677",
		"44.2960636023", "20171114115031"], ["86.0635673619", "44.2960854769","20171114115050"], ["86.0633436276", "44.2958428701", "20171114115119"],
		["86.0639209456", "44.2957262615", "20171114115155"], ["86.0648641675",
		"44.2964784765", "20171114115231"], ["86.0641079594", "44.2960666675",
		"20171114115250"], ["86.0646166779", "44.2962953276", "20171114115333"],
		["86.0642845382", "44.2957369332", "20171114115358"], ["86.0636880078",
		"44.2960784454", "20171114115622"], ["86.0633651457", "44.2957821438",
		"20171114115650"], ["86.0632496458", "44.2957979427", "20171114115723"],
		["86.063402859", "44.295782371", "20171114115744"], ["86.063652036",
		"44.2959877108", "20171114115830"], ["86.0629995164", "44.2960077769",
		"20171114115851"], ["86.0634390187", "44.2960440052", "20171114115915"],
		["86.0635926733", "44.2960541594", "20171114120144"], ["86.0637607268",
		"44.2959993712", "20171114120201"], ["86.0631006591", "44.2958308716",
		"20171114120215"], ["86.0631036837", "44.2955888768", "20171114120250"],
		["86.0634238743", "44.2960137701", "20171114120317"]]
		注意：开始和结束时间必须在同一个月份
	 * @param XID
	 * @param startTime  20171101000000
	 * @param endTime    20171115000000
	 * @return
	 * @return: String
	 */
	public static String getlochis(String XID,String startTime,String endTime){
		return sendHttp(HttpConstant.GETLOCHIS_URL,XID+"|"+startTime+"|"+endTime);
	}
	
	/**
	 * 描述：根据社区 ID 返回社区内的所有号码、xid 、位置信息、采集时间
	 * 功能说明：传入社区 ID 后返回该社区内所有的 x濼d 以及信息
		调用代码：
		#-*-coding:utf-8-*-import requests,json
		url='''http://127.0.0.1:9802/getalluserarea'''
		reqresult=requests.post(url=url,data='sjalouankkjhfsa213sdf1233gbvcm'+'|'
		+'1003')
		print reqresult.content
		返回结果 濽s瀂瀁：
		["24419|1531300|10|\u5317\u4eac|20171114115447|90.28494571049112|43.845
		755384959055",
		"24420|1532149|10|\u5317\u4eac|20171114120338|90.28358113658253|43.8463
		1975201336",
		"24421|1808935|935|\u6b66\u5a01|20171114120107|90.30293839850333|43.83
		1124953251425",
		"24422|1775215|935|\u6b66\u5a01|20171114120414|90.286282493887|43.8428
		9393276111"]
		返回字段说明：
		x濼d|号码|区号|城市名称|该号码采集时间|经度|纬度
	 * @param custId
	 * @return
	 * @return: String
	 */
	public static String getalluserarea(String custId){
		return sendHttp(HttpConstant.GETALLUSERAREA_URL,custId);
	}
	
	/**
	 * 描述：根据 xid 以及判断规则后提供该 xid 触发短信
	 * 功能说明：根据 x濼d 以及判断规则后提供该 x濼d 触发短信
		调用代码：
		#-*-coding:utf-8-*-import requests,json
		url='''http://127.0.0.1:9802/sendsms'''
		reqresult=requests.post(url=url,data='sjalouankkjhfsa213sdf1233gbvcm'+'|'
		+'1008|test111 赵测试')
		print reqresult.content
		传入参数为密钥+|+xid+内容 内容请过滤不要存在|符号
	 * @param XID
	 * @param msg  短信内容
	 * @return
	 * @return: String
	 */
	public static String sendsms(String XID,String msg){
		return sendHttp(HttpConstant.SENDSMS_URL,XID+"|"+msg);
	}
	
	/**
	 * 描述：文本转语音外呼接口
	 * 功能说明：传入 xid 和内容，触发后直接会产生呼叫，朗诵文本内容
		调用代码：
		#-*-coding:utf-8-*-
		import requests,json
		url='''http://127.0.0.1:9802/voicenotice'''
		reqresult=requests.post(url=url,data='sjalouankkjhfsa213sdf1233gbvcm'+'|'
		+'1008|test111 赵测试')
		print reqresult.content
		传入参数为 濾ey+|+xid+呼叫语音内容
	 * @param XID
	 * @param msg
	 * @return
	 * @return: String
	 */
	public static String voicenotice(String XID,String msg){
		return sendHttp(HttpConstant.VOICENOTICE_URL,XID+"|"+msg);
	}
	
	/**
	 * 描述：获取实时位置接口 返回结果为 gps 经纬度
	 *接口说明：直接获取某个 x濼d 的位置信息， 1 分钟内的调用结果相同。 强烈不建
		议频繁调用此接口，此接口每分钟调用次数不应该大于 30 次。 频繁调用会被封
		锁。
		调用代码
		#-*-coding:utf-8-*-
		import requests,json
		url='''http://127.0.0.1:9802/getlocnow'''
		reqresult=requests.post(url=url,data='sjalouankkjhfsa213sdf1233gbvcm'+'|'
		+'1008')
		print reqresult.content
		返回结果：
		87.5614|43.882088
	 * @param XID
	 * @return
	 * @return: String
	 */
	public static String getlocnow(String XID){
		return sendHttp(HttpConstant.GETLOCNOW_URL,XID);
	}
	
	
	/**
	 * 描述：通用发送http请求
	 * @param data
	 * @return
	 * @return: String
	 */
	public static String sendHttp(String url,String data){
		System.out.println("请求参数："+data);
		String body = HttpRequest.post(url).body(HttpConstant.SECRET_KEY+"|"+data).charset("utf-8").execute().body();
		System.out.println("返回结果："+body);
		return body;
	}
	
	/**
	 * 描述：unicode编码转汉字
	 * @param unicodeStr
	 * @return
	 * @return: String
	 */
	public static String decode(String unicodeStr) {  
	    if (unicodeStr == null) {  
	        return null;  
	    }  
	    StringBuffer retBuf = new StringBuffer();  
	    int maxLoop = unicodeStr.length();  
	    for (int i = 0; i < maxLoop; i++) {  
	        if (unicodeStr.charAt(i) == '\\') {  
	            if ((i < maxLoop - 5)&& ((unicodeStr.charAt(i + 1) == 'u') || (unicodeStr.charAt(i + 1) == 'U'))) {
					try {
						retBuf.append((char) Integer.parseInt(
								unicodeStr.substring(i + 2, i + 6), 16));
						i += 5;
					} catch (NumberFormatException localNumberFormatException) {
						retBuf.append(unicodeStr.charAt(i));
					}
				}else {
					retBuf.append(unicodeStr.charAt(i));
				}
	        } else {  
	            retBuf.append(unicodeStr.charAt(i));  
	        }  
	    }  
	    return retBuf.toString();  
	}  

	
}
